avltree: Add function 'avltree_clear'.
authoroliskoli <oliskoli>
Wed, 3 Sep 2008 19:23:49 +0000 (19:23 +0000)
committeroliskoli <oliskoli>
Wed, 3 Sep 2008 19:23:49 +0000 (19:23 +0000)
avltree.c
avltree.h

index c90c5680fbd46345009039114b5ef68dca3c2e03..2726ef713e02e0c1c6393592b6feb9346a4b06d1 100644 (file)
--- a/avltree.c
+++ b/avltree.c
@@ -87,17 +87,32 @@ avltree_init(const int options, const char *module)
        return tree;
 }
 
+/* Delete all items of tree [tree] */
 
-/* Destroy an AVL Tree */
-
-void
-avltree_done(avltree_t *tree)
+int
+avltree_clear(avltree_t *tree)
 {
+       int res;
+       
        AVLTREE_CHECK_HANDLE(tree);
 
+       res = tree->count;
        avltree_save_key(tree, NULL);
-       if (tree->count)
+       if (res) {
                avltree_node_free(tree, tree->root);
+               /* avltree_node_free doesn't touch 'count' */
+               tree->count = 0;
+               tree->root = NULL;
+       }
+       return res;
+}
+
+/* Destroy an AVL Tree */
+
+void
+avltree_done(avltree_t *tree)
+{
+       avltree_clear(tree);
        xfree(tree);
 }
 
index d8c9ddb4e7a2ab2083b1c518a014c084580fa8e8..8df8ffb67a555044bac5e4e585ea39807bbff6b0 100644 (file)
--- a/avltree.h
+++ b/avltree.h
@@ -66,6 +66,9 @@ avltree_t *avltree_init(const int options, const char *module);
 /* Destroy an AVL Tree */
 void avltree_done(avltree_t *tree);
 
+/* Delete all items of tree [tree]; returns number of deleted items */
+int avltree_clear(avltree_t *tree);
+
 /* Get number of items in tree */
 int avltree_count(const avltree_t *tree);